package com.lili.sort;

import java.util.Arrays;

/**
 * @Auther: 李 力
 * @Date: 2024/8/2
 * @Description: 按照频率将数组升序排序
 * @version: 1.0
 */
public class LeetCode1636 {
    /*
     *  思路: 计数排序实现
     *  时间复杂度:  O(201)
     *  空间复杂度: O(nums.len)
     */
    public int[] frequencySort(int[] nums) {
        int[] count = new int[201];
        for (int num : nums) {
            //考虑有负数的情况
            count[num + 100]++;
        }
        //设置比较器:按照频率升序，相同按值降序
        return Arrays.stream(nums).boxed().sorted((a, b) -> {
            int af = count[a + 100];
            int bf = count[b + 100];
            if (af > bf) {
                return 1;
            } else if (af < bf) {
                return -1;
            } else {
                return b - a;
            }
        }).mapToInt(Integer::intValue).toArray();
    }
}
